srvMap.add('queryFuncTree', '','front/sh/func!execute?uid=queryFuncTree');//列表
srvMap.add('funcDelete', '','front/sh/func!execute?uid=funcDelete');//删除 
var ztree_func;
var zNodes; //树的全部数据

/**
 * 
 * @Description :自定义树结构内容
 * @author  wucm,xueyf3 
 * @date 创建时间：2015年8月18日 下午3:12:27 
 * @version 1.0
 */
function addDiyDom(treeId, treeNode) {
	var tId = treeNode.tId;
	var level = treeNode.level;
	var isParent = treeNode.isParent;
	var open = treeNode.open;
	var aObj = $("#" + tId);
	var id = treeNode.id;
	var name = treeNode.name;
	var isParent = treeNode.isParent;
	var status = treeNode.status;
	var statusName = "正常";
	if (status == '0') {
		statusName = "已停用";
	}

	var ml = 30 * level;
	var classOpen = "";
	if (isParent) {
		if (open) {
			classOpen = "center_open";
		} else {
			classOpen = "center_close";
		}
	} else {
		classOpen = "center_docu";
	}

	var s = '<div class="row">' +
		'<div class="col-c1"><span style="margin-left:$6px" id="$5_switch" class="button level switch $7" treenode_switch=""></span>$1</div>' +
		'<div class="col-c2">$2</div>' +
		'<div class="col-c3">$3</div>' +
		'<div class="col-c4">$4</div>' +
		'<div class="clb"></div>' +
		'</div>';
	s = s.replace(/\$1/g, name);
	s = s.replace(/\$2/g, id);
	s = s.replace(/\$3/g, statusName);
	if (isParent) {
		if (treeNode.id == 'ROOT' || treeNode.id == 'root') {
			s = s.replace(/\$4/g, "<button class='button_dashed_green' onclick='funcAdd(\"" + treeNode.tId + "\")'>新增</button>");
		} else {
			s = s.replace(/\$4/g, "<button class='button_dashed_green' onclick='funcAdd(\"" + treeNode.tId + "\")'>新增</button><button class='button_dashed_blue' onclick='funcModify(\"" + treeNode.tId + "\")'>修改</button><button class='button_dashed_grev' onclick='funcDelete(\"" + treeNode.tId + "\")'>删除</button>");
		}
	} else {
		s = s.replace(/\$4/g, "<button class='button_dashed_blue' onclick='funcModify(\"" + treeNode.tId + "\")'>修改</button><button class='button_dashed_grev' onclick='funcDelete(\"" + treeNode.tId + "\")'>删除</button><button class='button_dashed_purple' onclick='funcEmpower(\"" + treeNode.id + "\")'>赋权</button>");
	}
	s = s.replace(/\$5/g, tId);
	s = s.replace(/\$6/g, ml);
	s = s.replace(/\$7/g, classOpen);

	aObj.html(s);

};

/**
 * 
 * @Description :树节点双击事件
 * @author  xueyf3 
 * @date 创建时间：2015年8月18日 下午3:12:27 
 * @version 1.0
 */
function dblClickExpand(treeId, treeNode) {
	if (treeNode.id == '-1' || treeNode.id == -1) { //根节点不收缩
		return false;
	} else {
		return true;
	}
}

$(function() {
	// 根据实际显示隐藏菜单
	$(".button_blue").on("click", funcSearch);
	$(".search-input").on("keyup", funcSearch);
	// 功能树-初始化
	initFuncTree();

	// 绑定搜索事件
	$(document).delegate('.search-btn', 'click', function(event) {
		funcSearch();
	})
	$(document).delegate('.search-input', 'keyup', function(event) {
		var keycode = event.keyCode;
		if (keycode == 13) {
			funcSearch();
		}
	});

});

/**
 * 
 * @Description : 功能树-初始化
 * @return void
 * 
 * @author : wucm
 * @date : 2015年8月3日 上午10:10:29
 * 
 */
function initFuncTree() {
	$(".loadingSmall").css({
		'height': '100px'
	});
	Util.ajax.postJsonSync(srvMap.get('queryFuncTree'),null,function(json,status){
		
		if (status) {
			if (null == json.object || null == json.object.data) {
				return;
			}
			// 加载树
			
			zNodes = json.object.data;
			initFuncTreeByZNodes(zNodes);
		}else {
			alert('错误','数据异常！');  
		}
		
	});
//	var url = CONTENT_PATH + "/com.asiainfo.manage.FuncAction.queryFuncTree.invoke";
//	Base.ajax({
//		url: url,
//		success: function(req) {
//			if (null == req || null == req.result) {
//				return;
//			}
//
//			// 加载树
//
//			zNodes = req.result;
//			initFuncTreeByZNodes(zNodes);
//
//		}
//	});
}

/**
 * 根据数据初始化树的样式
 * xueyf3
 */
function initFuncTreeByZNodes(zNodes) {
	var setting = {
		view: {
			addDiyDom: addDiyDom,
			showIcon: false,
			nameIsHTML: true,
			fontCss: function(treeId, treeNode) {
				var o = {
					"color": "#32b5cb",
					"font-weight": "bold"
				};
				if (treeNode.status == "0") {
					o = {
						"color": "#bbb",
						"font-weight": "bold"
					};
				}
				if (treeNode.highlight) {
					o = {
						"color": "red",
						"font-weight": "bold"
					};
				}

				return o;
			}
		},

		data: {
			simpleData: {
				enable: true
			}
		},
		callback: {
			onCollapse: zTreeOnCollapseOrExpand,
			onExpand: zTreeOnCollapseOrExpand
		}
	};

	ztree_func = $.fn.zTree.init($("#funcTree"), setting, zNodes);
	var nodes = ztree_func.getNodes();
	if (nodes.length>0) {
		ztree_func.expandNode(nodes[0], true, false, true);
	}
	$("#funcTree .row:odd").addClass('row-odd');
	// 隐藏进度条
	$(".loadingSmall").css({
		'height': 'auto',
		'background-position': '-1000px -1000px'
	});
}
/**
 * 功能搜索
 * @return {[type]} [description]
 */
function funcSearch() {
	var s = $(".search-input").val();
	s = $.trim(s);

	var nodes = ztree_func.getNodes();
	nodes = ztree_func.transformToArray(nodes);
	for (var i = nodes.length - 1; i >= 0; i--) {
		var node = nodes[i];
		var id = node.id;
		var name = node.name;
		var type = node.type;
		var isParent = node.isParent;
		if (s.length > 0 && (id.indexOf(s) != -1 || name.indexOf(s) != -1) && isParent) {
			node.highlight = true;
			ztree_func.updateNode(node);
			ztree_func.expandNode(node, true, true, true);
		} else if (isParent) {
			node.highlight = false;
			ztree_func.updateNode(node);
			ztree_func.expandNode(node, true, true, true);
		}
		if (s.length > 0 && (id.indexOf(s) != -1 || name.indexOf(s) != -1) && "func" == type) {
			node.highlight = true;
			ztree_func.showNode(node);
			ztree_func.updateNode(node);
		} else if (s.length > 0 && "func" == type) {
			ztree_func.hideNode(node);
			ztree_func.updateNode(node);
		} else if ("func" == type) { //没有匹配字串的时候都常规显示
			node.highlight = false;
			ztree_func.showNode(node);
			ztree_func.updateNode(node);
		}
	};
}

/**
 * 
 * @Description :遍历某个树节点
 * @author  xueyf3 
 * @date 创建时间：2015年8月20日 下午2:49:56 
 * @version 1.0
 */
function getNodeInfo(node, clist) {
	var childrens = [];
	if (node.isParent) {
		var obj = {
			"type": "folder",
			"node": node
		};
		clist.push(obj);
		if (node.children) {
			childrens = node.children;
			for (var i = 0; i < childrens.length; i++) {
				getNodeInfo(childrens[i], clist);
			}
		}
	} else {
		var obj = {
			"type": "func",
			"node": node
		};
		clist.push(obj);

	}
}

function funcDelete(tId) {
	var node = ztree_func.getNodeByTId(tId);
	var cStr = "";
	if (node.isParent) {
		var ids = [],
			names = [];
		var clist = [];
		var name = node.name;
		getNodeInfo(node, clist); //遍历该节点的子元素,过滤出该文件夹下面可删除的
		var ff = -1,
			fc = 0;
		for (var k = 0; k < clist.length; k++) {
			var obj = clist[k];
			var cnode = obj.node;
			if (obj.type == 'folder') {
				ff++;
				ids.push(cnode.id); //保存所有文件夹、功能的func_id
			} else {
				ids.push(cnode.id);
				fc++;
			}
		}
		if (ff > 0 && fc > 0) {
			names.push("</br>删除[" + name + "]节点，同时将会删除此节点下的" + ff + "个文件夹，以及" + fc + "个子功能.");
		} else {
			if (fc > 0) {
				names.push("</br>删除[" + name + "]节点，同时将会删除此节点下的" + fc + "个子功能。");
			} else if (ff > 0) {
				names.push("</br>删除[" + name + "]节点，同时将会删除此节点下的" + ff + "个文件夹。");
			} else {
				names.push("</br>删除节点：[" + name + "].");
			}
		}

		ids = ids.join(";");
		names = names.join("、");
		var data = {
			"funcIds": ids
		};
		cStr = '确认删除以下内容？' + names;
	} else {
		var funcId = node.id;
		var funcName = node.name;
		var data = "&funcIds=" + funcId;
		cStr = '确认删除[' + funcName + ']？';
	}


	var d = top.dialog({
		title: '删除确认',
		content: cStr,
		width: '260px',
		okValue: '确定',
		ok: function() {
			this.title('提交中…');

			// 功能删除-提交
			funcDeleteSubmit(data);

			return true;
		},
		cancelValue: '取消',
		cancel: function() {}
	});
	d.showModal();
}
/**
 * 
 * @Description : 功能删除
 * @return void
 * 
 * @author : wucm
 * @date : 2015年8月5日 下午4:02:03
 * 
 */
function funcDeleteByCheck() {
	var ids = [],
		names = [];
	var nodes = ztree_func.getCheckedNodes(true);
	var length = nodes.length;
	for (var i = 0; i < length; i++) {
		var node = nodes[i];
		var id = node.id;
		var name = node.name;
		if (node.isParent) {
			var clist = [];
			getNodeInfo(node, clist); //遍历该节点的子元素,过滤出该文件夹下面可删除的
			var ff = -1,
				fc = 0;
			for (var k = 0; k < clist.length; k++) {
				var obj = clist[k];
				var cnode = obj.node;
				if (obj.type == 'folder') {
					ff++;
					ids.push(cnode.id); //保存所有文件夹、功能的func_id
				} else {
					ids.push(cnode.id);
					fc++;
				}
			}
			if (ff > 0 && fc > 0) {
				names.push("</br>删除[" + name + "]节点，同时将会删除此节点下的" + ff + "个文件夹，以及" + fc + "个子功能.");
			} else {
				if (fc > 0) {
					names.push("</br>删除[" + name + "]节点，同时将会删除此节点下的" + fc + "个子功能。");
				} else if (ff > 0) {
					names.push("</br>删除[" + name + "]节点，同时将会删除此节点下的" + ff + "个文件夹。");
				} else {
					names.push("</br>删除节点：[" + name + "].");
				}
			}
		} else if (ids.indexOf(id) == -1) { //去除在文件夹下面重复的子节点
			ids.push(id);
			names.push("[" + name + "]");
		}
	}
	ids = ids.join(";");
	names = names.join("、");

	if (ids.length < 1) {
		return;
	}

	var data = {
		"funcIds": ids
	};

	var d = top.dialog({
		title: '删除确认',
		content: '确认删除以下内容？' + names,
		width: '350px',
		okValue: '确定',
		ok: function() {
			this.title('提交中…');

			// 功能删除-提交
			funcDeleteSubmit(data);

			return true;
		},
		cancelValue: '取消',
		cancel: function() {}
	});
	d.showModal();
}

/**
 * 
 * @Description : 功能删除-提交
 * @param data
 * @return void
 * 
 * @author : wucm
 * @date : 2015年8月5日 下午4:31:14
 * 
 */
function funcDeleteSubmit(data) {
	
Util.ajax.postJsonSync(srvMap.get('funcDelete'),data,function(json,status){
		
		if (status) {
			if (null == json.object || null == json.object.data) {
				return;
			}
			
			// 功能列表-初始化
			initFuncTree();
		}else {
			alert('错误','数据异常！');  
		}
		
	});
	
//	var url = CONTENT_PATH + "/com.asiainfo.manage.FuncAction.funcDelete.invoke";
//	Base.ajax({
//		url: url,
//		data: data,
//		success: function(req) {
//			if (null == req || null == req.result) {
//				return;
//			}
//
//			// 功能列表-初始化
//			initFuncTree();
//		}
//	});
}

/**
 * 
 * @Description : 功能修改
 * @return void
 * 
 * @author : wucm
 * @date : 2015年8月5日 下午5:43:54
 * 
 */
function funcModify(tId) {
	var node = ztree_func.getNodeByTId(tId);
	var pNode = node.getParentNode();
	var funcId = node.id;
	funcId = funcId.EncodeBase64();
	var parentName = pNode.name;
	parentName = parentName.EncodeBase64();
	var funcType = '1';
	if (node.isParent == true) {
		funcType = '0';
	}
	funcType = funcType.EncodeBase64();
	var url = CONTENT_PATH + "/manage/func_modify.jsp?funcId=" + funcId + "&parentFuncName=" + parentName + "&funcType=" + funcType;
	window.location.href = url;
}

/**
 * 
 * @Description :
 * @author  xueyf3 
 * @date 创建时间：2015年8月18日 下午3:33:43 
 * @version 1.0
 */
function funcAdd(tId) {
	var node = ztree_func.getNodeByTId(tId);
	var funcId = node.id;
	var funcName = node.name;
	funcId = funcId.EncodeBase64();
	funcName = funcName.EncodeBase64();
	var url = CONTENT_PATH + "/manage/func_add.jsp?parentFuncId=" + funcId + "&parentFuncName=" + funcName;
	window.location.href = url;
}

/**
 * 
 * @Description :进行赋权
 * @author  xueyf3 
 * @date 创建时间：2015年9月15日 上午9:34:56 
 * @version 1.0
 */
function funcEmpower(funcId) {
	funcId = funcId.EncodeBase64();
	var url = CONTENT_PATH + "/manage/apply.jsp?funcId=" + funcId;
	window.location.href = url;
}
/**
 * 
 * @Description :节点收缩事件
 * @author  xueyf3 
 */
function zTreeOnCollapseOrExpand(){
	$("#funcTree .row").removeClass('row-odd');
	$("#funcTree .row:visible:odd").addClass('row-odd');
}
